package tests;
import static org.junit.Assert.*;
import businessEntities.*;

import java.util.Date;
import org.junit.Before;
import org.junit.Test;

public class ActifTest {
	
	public Actif actif;
	public Cours cours1;
	public Cours cours2;
	public Cours cours3;
	public Cours cours4;
	public Cours cours5;
	public Cours cours6;
	public Cours cours7;
	public Cours cours8;
	public Cours cours9;
	public Cours cours10;
	
	@Before
	public void setUp() throws Exception {
		
		actif = new Actif();
		actif.setISin("123456");
		actif.setIntituleActif("Air France");
		
		
		cours1 = new Cours();
		cours1.setOuverture(12.5);
		cours1.setFermeture(13);		
		cours1.setDateCours(DateCours.getDate("15/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours2 = new Cours();
		cours2.setOuverture(13.2);
		cours2.setFermeture(14);		
		cours2.setDateCours(DateCours.getDate("16/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours3 = new Cours();
		cours3.setOuverture(13.5);
		cours3.setFermeture(11.8);		
		cours3.setDateCours(DateCours.getDate("17/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours4 = new Cours();
		cours4.setOuverture(15);
		cours4.setFermeture(14.8);		
		cours4.setDateCours(DateCours.getDate("18/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours5 = new Cours();
		cours5.setOuverture(14.9);
		cours5.setFermeture(14.8);		
		cours5.setDateCours(DateCours.getDate("19/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours6 = new Cours();
		cours6.setOuverture(14);
		cours6.setFermeture(14.6);		
		cours6.setDateCours(DateCours.getDate("20/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours7 = new Cours();
		cours7.setOuverture(15);
		cours7.setFermeture(15.2);		
		cours7.setDateCours(DateCours.getDate("21/03/2010", DateCours.FORMAT_DD_MM_YYYY));

		cours8 = new Cours();
		cours8.setOuverture(16);
		cours8.setFermeture(16.8);		
		cours8.setDateCours(DateCours.getDate("22/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours9 = new Cours();
		cours9.setOuverture(16.5);
		cours9.setFermeture(17.8);		
		cours9.setDateCours(DateCours.getDate("23/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		cours10 = new Cours();		
		cours10.setOuverture(17);
		cours10.setFermeture(14.8);		
		cours10.setDateCours(DateCours.getDate("24/03/2010", DateCours.FORMAT_DD_MM_YYYY));
		
		actif.getCours().add(cours1);
		actif.getCours().add(cours2);
		actif.getCours().add(cours3);
		actif.getCours().add(cours4);
		actif.getCours().add(cours5);
		actif.getCours().add(cours6);
		actif.getCours().add(cours7);
		actif.getCours().add(cours8);
		actif.getCours().add(cours9);
		actif.getCours().add(cours10);
		
		actif.setDateDebut(actif.getCours().get(0).getDateCours());
		actif.setDateFin(actif.getCours().get(actif.getCours().size() - 1).getDateCours());
		
	}

	@Test
	public void testGetPrix() {
		
		assertEquals(new Double(12.5), new Double(actif.getPrix(cours1, Cours.OUVERTURE)));
		assertEquals(new Double(14.8), new Double(actif.getPrix(cours10, Cours.FERMETURE)));
	}
	
	@Test
	public void testCalculVariation() {
		
		double expected = Math.abs(Math.log10(14.8) - Math.log10(12.5));
		double actual = actif.calculVariation(0, 3, Cours.OUVERTURE, Cours.FERMETURE);
		
		System.out.println("expected: " + expected +" ");
		System.out.println("actual: " + actual +" ");
			
		assertEquals(new Double(expected), new Double(actual));
	}
	
	@Test
	public void testFonctionPartition() {

		//double expected = Math.pow(actif.calculVariation(0, 4, Cours.OUVERTURE, Cours.FERMETURE), 1) + Math.pow(actif.calculVariation(4, 4, Cours.OUVERTURE, Cours.FERMETURE),1);
		double expected = Math.pow(Math.abs(Math.log10(14.8) - Math.log10(13)),1) + Math.pow(Math.abs((Math.log10(15.2) - Math.log10(14.8))),1);
		double actual = actif.fonctionPartition(3, 1, Cours.FERMETURE, Cours.FERMETURE);
		
		System.out.println("expected: " + expected +" ");
		System.out.println("actual: " + actual +" ");
		
		//Ajout
		//valeurExpected = Math.abs(Math.pow(actif.calculVariation(1, 1, cours1, Cours.OUVERTURE, Cours.FERMETURE), 1));
		
		assertEquals(new Double(expected), new Double(actual));
		
	}
}
